home *** CD-ROM | disk | FTP | other *** search
/ United Public Domain Gold 4 / United Public Domain Gold 4.iso / fredfish / ff.0026.dms / ff.0026.adf / UnHunk / longio.c < prev    next >
C/C++ Source or Header  |  1986-06-16  |  2KB  |  143 lines

  1. /*
  2.  *  longio.h       Copyright 1985  Landon M. Dyer
  3.  *
  4.  * Minor mods for Amiga, DBUG macros    19Apr86  edb
  5.  */
  6.  
  7. #include <stdio.h>
  8. #include "convert.h"
  9.  
  10. #ifdef DBUG
  11. #include <local/dbug.h>
  12. #else
  13. #include "dbugstubs.h"
  14. #endif
  15.  
  16. extern long filpos;
  17. extern int printing;
  18. extern char buf[];
  19.  
  20.  
  21. /*
  22.  * Get a longword or complain about premature EOF
  23.  *
  24.  */
  25. getlong(fd, p_lw)
  26. int fd;
  27. long *p_lw;
  28. {
  29.     DBUG_ENTER("getlong");
  30.     if (readlong(fd, p_lw) == EOF)
  31.         panic("Premature EOF getting longword");
  32.     DBUG_RETURN(OK);
  33. }
  34.  
  35.  
  36. /*
  37.  * Read 68000 longword from file,
  38.  * stuff it into '*p_lw' in the
  39.  * host machine's longword format.
  40.  *
  41.  */
  42. readlong(fd, p_lw)
  43. int fd;
  44. long *p_lw;
  45. {
  46.     char buf[4], *out;
  47.  
  48.     DBUG_ENTER("readlong");
  49.     DBUG_3("io", "input filepos=%ld", lseek(fd, 0L, 1));
  50.     out = (char *)p_lw;
  51.     if (read(fd, buf, 4) != 4)          /* probably end of file */
  52.         DBUG_RETURN(EOF);
  53.  
  54.     filpos += 4;
  55. #if MACHINE == MSDOS || MACHINE == VAXVMS
  56.     /*
  57.      * 8086/8088 conversion
  58.      * hh hl lh ll ==> ll lh hl hh
  59.      */
  60.     out[0] = buf[3];
  61.     out[1] = buf[2];
  62.     out[2] = buf[1];
  63.     out[3] = buf[0];
  64. #endif
  65.  
  66. #if MACHINE == Amiga
  67.     out[0] = buf[0];
  68.     out[1] = buf[1];
  69.     out[2] = buf[2];
  70.     out[3] = buf[3];
  71. #endif
  72.     DBUG_4("io","got 0x%lx, ret=0x%lx", *(long *)buf, *(long *)out);
  73.     DBUG_RETURN(0);
  74. }
  75.  
  76.  
  77. /*
  78.  * Write word to file,
  79.  * in 68000 format.
  80.  */
  81. writeword(fd, w)
  82. int fd;
  83. unsigned int w;
  84. {
  85.     char buf[2], *out;
  86.  
  87.     DBUG_ENTER("writeword");
  88.  
  89.     out = (char *)&w;
  90. #if MACHINE == MSDOS || MACHINE == VAXVMS
  91.     buf[0] = out[1];
  92.     buf[1] = out[0];
  93. #endif
  94.  
  95. #if MACHINE == Amiga
  96.     buf[0] = out[0];
  97.     buf[1] = out[1];
  98. #endif
  99.     DBUG_3("io", "out filepos=0x%lx", lseek(fd, 0L, 1));
  100.     DBUG_4("io", "got 0x%x, writing 0x%x", w, *(unsigned short *) out);
  101.     if (write(fd, buf, 2) != 2)
  102.         panic("Write error (word)");
  103.  
  104.     DBUG_RETURN(0);
  105. }
  106.  
  107.  
  108. /*
  109.  * Write longword to file, in
  110.  * 68000 format.
  111.  */
  112. writelong(fd, lw)
  113. int fd;
  114. long lw;
  115. {
  116.     char buf[4], *out;
  117.  
  118.     DBUG_ENTER("writelong");
  119.  
  120.     out = (char *)&lw;
  121. #if MACHINE == MSDOS || MACHINE == VAXVMS
  122.     buf[0] = out[3];
  123.     buf[1] = out[2];
  124.     buf[2] = out[1];
  125.     buf[3] = out[0];
  126. #endif
  127.  
  128. #if MACHINE == Amiga
  129.     buf[0] = out[0];
  130.     buf[1] = out[1];
  131.     buf[2] = out[2];
  132.     buf[3] = out[3];
  133. #endif
  134.  
  135.     DBUG_3("io", "out filepos=0x%lx", lseek(fd, 0L, 1));
  136.     DBUG_4("io", "got 0x%lx, writing 0x%lx", lw, *(long *) out);
  137.     if (write(fd, buf, 4) != 4)
  138.         panic("Write error (longword)");
  139.  
  140.     DBUG_RETURN(0);
  141. }
  142.  
  143.